package com.eastfair.auth.service;

import com.eastfair.auth.vo.UserOrganizationVo;
import com.eastfair.boot.service.SuperCacheService;
import com.eastfair.auth.entity.UserOrganization;
import com.eastfair.core.base.R;
import org.springframework.beans.BeanUtils;

import java.util.List;

/**
 * <p>
 * 业务接口
 *
 * </p>
 *
 * @author ligang
 * @date 2021-07-16
 */
public interface UserOrganizationService extends SuperCacheService<UserOrganization> {

    /**
     * 删除
     * @param id  主键id
     * @return
     */
    R del(Long id);

    /**
     * 删除 跟组织的关联关系
     *
     * @param orgIds 组织id集合
     * @return
     */
    R delOfOrgIds(List<Long> orgIds);

    /**
     * 查询组织下的员工信息
     *
     * @param orgIds 组织id集合
     * @return
     */
    List<UserOrganization> queryUserByOrg(List<Long> orgIds);

    /**
     * 查询组织下的用户信息
     *
     * @param orgIds 组织id集合
     * @return
     */
    List<UserOrganizationVo> queryUserVoByOrg(List<Long> orgIds);


    /**
     * 添加用户到节点
     * @param orgId 主办组织
     * @param userIds 用户id集合
     * @param isLeader 是否是负责人
     * @return
     */
    R<UserOrganization> addUserOfOrg(Long orgId, List<Long> userIds, Integer isLeader);

    /**
     * 剔除用户到节点
     *
     * @param orgId         组织id
     * @param removeUserIds 用户id集合
     * @return
     */
    R removeUserOfOrg(Long orgId, List<Long> removeUserIds);
    /**
     * 剔除用户到节点
     * @param removeUserIds 用户id集合
     * @return
     */
    R removeUserOfOrg(List<Long> removeUserIds);

    /**
     * 批量剔除节点上的用户
     *
     * @param orgId         组织id
     * @param removeUserIds 用户id集合
     * @return
     */
    R removeUserOfOrg(List<Long> orgId, List<Long> removeUserIds);

    /**
     * 条件查询list
     *
     * @param userOrganization 用户组织实体
     * @param userIds          用户id集合
     * @param orgIds           组织id集合
     * @return
     */
    List<UserOrganization> listOfUserOrganization(UserOrganization userOrganization, List<Long> userIds, List<Long> orgIds);

    /**
     * 条件查询list 缓存
     *
     * @param userOrganization 用户组织实体
     * @param userIds          用户id集合
     * @param orgIds           组织id集合
     * @return
     */
    List<UserOrganization> listOfUserOrganizationOfCache(UserOrganization userOrganization, List<Long> userIds, List<Long> orgIds);


    UserOrganizationVo doToVo(UserOrganization userOrganization) ;

    List<UserOrganizationVo> doToVos(List<UserOrganization> userOrganizationList);



}
